Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 << zurück
Visual C# 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2005

Visual C# 2005
1.320 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-586-X
gp Kapitel 3 Grundlagen der Sprache C#
  gp 3.1 Konsolenanwendungen
    gp 3.1.1 Allgemeine Anmerkungen
    gp 3.1.2 Ein erstes Konsolenprogramm
  gp 3.2 Grundlagen der C#-Syntax
    gp 3.2.1 Kennzeichnen, dass eine Anweisung abgeschlossen ist
    gp 3.2.2 Anweisungs- und Gliederungsblöcke
    gp 3.2.3 Kommentare
    gp 3.2.4 Die Groß- und Kleinschreibung
    gp 3.2.5 Die Struktur einer Konsolenanwendung
  gp 3.3 Variablen und Datentypen
    gp 3.3.1 Variablendeklaration
    gp 3.3.2 Der Variablenbezeichner
    gp 3.3.3 Der Zugriff auf eine Variable
    gp 3.3.4 Ein- und Ausgabemethoden der Klasse »Console«
    gp 3.3.5 Die einfachen Datentypen
    gp 3.3.6 Typkonvertierung
  gp 3.4 Operatoren
    gp 3.4.1 Arithmetische Operatoren
    gp 3.4.2 Vergleichsoperatoren
    gp 3.4.3 Logische Operatoren
    gp 3.4.4 Bitweise Operatoren
    gp 3.4.5 Zuweisungsoperatoren
    gp 3.4.6 Stringverkettung
    gp 3.4.7 Sonstige Operatoren
    gp 3.4.8 Operator-Vorrangregeln
  gp 3.5 Datenfelder (Arrays)
    gp 3.5.1 Die Deklaration und Initialisierung eines Arrays
    gp 3.5.2 Der Zugriff auf die Array-Elemente
    gp 3.5.3 Speicherabbild eines Arrays
    gp 3.5.4 Mehrdimensionale Arrays
    gp 3.5.5 Festlegen der Array-Größe zur Laufzeit
    gp 3.5.6 Bestimmung der Array-Obergrenze
    gp 3.5.7 Die Gesamtanzahl der Array-Elemente
    gp 3.5.8 Verzweigte Arrays
  gp 3.6 Kontrollstrukturen
    gp 3.6.1 Die »if«-Anweisung
    gp 3.6.2 Das »switch«-Statement
  gp 3.7 Programmschleifen
    gp 3.7.1 Die »for«-Schleife
    gp 3.7.2 Die »foreach«-Schleife
    gp 3.7.3 Die »do«- und die »while«-Schleife


Galileo Computing

3.4 Operatoredowntop

Im vorhergehenden Abschnitt haben wir uns eingehend mit den Daten auseinander gesetzt. Nun werden Sie lernen, wie diese Daten mit C# verarbeitet werden können. Bevor wir uns an die Details begeben, müssen wir uns zunächst mit der Terminologie auseinander setzen.

An oberster Stelle steht der Begriff Ausdruck. Ein Ausdruck ist die kleinste ausführbare Einheit eines Programms und setzt mindestens einen Operator voraus. Im einfachsten Fall gilt schon die Anweisung


intVar = 22;

als Ausdruck. Ein Ausdruck wird immer aus mindestens einem Operanden und einem Operator gebildet. Der Operator im Beispiel oben ist das Gleichheitszeichen, als Operand gilt sowohl die Konstante 22 als auch die Variable intVar. Operatoren verknüpfen Operanden miteinander und führen Berechnungen durch, ermitteln also als Ergebnis der Operation neue Werte. Nahezu alle Operatoren von C# benötigen zwei Operanden. Kernkonstrukt von Ausdrücken sind die Operatoren, die sich entsprechend ihrer Arbeitsweise in verschiedene Gruppen aufteilen lassen:

gp  arithmetische Operatoren
gp  Vergleichsoperatoren
gp  logische Operatoren
gp  bitweise Operatoren
gp  Zuweisungsoperatoren
gp  sonstige Operatoren

Galileo Computing

3.4.1 Arithmetische Operatoren  downtop

C# kennt die üblichen Operatoren der vier Grundrechenarten Addition, Subtraktion, Division und Multiplikation. Darüber hinaus werden von dieser Gruppe noch weitere Operatoren beschrieben, die in ihrem Kontext eine besondere Bedeutung haben. Die folgende Tabelle gibt zunächst einen allgemeinen Überblick.


Tabelle 3.7   Arithmetische Operatoren

Operator Beschreibung
+ Hat zwei Funktionalitäten: E Als Additionsoperator bildet er die Summe zweier Operanden (x  +  y). E Als Vorzeichenoperator beschreibt er eine positive Zahl (+x), ist also ein einstelliger (unärer) Operator.
Hat ebenfalls zwei Funktionalitäten: Als Subtraktionsoperator eingesetzt bildet er die Differenz zweier Operanden (x    y). Als unärer Vorzeichenoperator beschreibt er eine negative Zahl (–x).
* Multiplikationsoperator, multipliziert zwei Operanden (x  *  y).
/ Divisionsoperator, dividiert zwei Operanden (x  /  y), behält den Nachkommateil der Division.
% Restwertoperator, dividiert zwei Operanden und liefert als Ergebnis den Restwert der Operation (x  %  y).
++ Erhöht den Inhalt des Operanden um 1. Das Ergebnis der Operation ++x ist der Wert des Operanden nach der Erhöhung (Präfixinkrementoperation). Das Ergebnis der Operation x++ ist der Wert des Operanden vor der Erhöhung (Postfixinkrementoperation).
-- Verringert den Inhalt des Operanden um 1. Das Ergebnis der Operation --x ist der Wert des Operanden nach der Verringerung (Präfixdekrementoperation). Das Ergebnis der Operation x-- ist der Wert des Operanden vor der Verringerung (Postfixdekrementoperation).

Der Einsatz der Operatoren zur Formulierung mathematischer Ausdrücke ist trivial. Zwei Operanden werden miteinander verknüpft, das Ergebnis der Operation wird der links vom Zuweisungsoperator stehenden Variablen zugewiesen.


short srtVar1 = 30;
short srtVar2 = 55;
short srtResult = srtVar1 + srtVar2;

Eine besondere Stellung nimmt der %-Operator ein, dessen Ergebnis einer Division der ganzzahlige Divisionsrest ist. Dazu ein Beispiel:


int x = 100;
int y = 17;
Console.WriteLine("Division mit % – Ergebnis = {0}", x % y);

Die Zahl 17 ist fünfmal in der Zahl 100 enthalten (für diejenigen, deren Ausbildungsziel der Hochschulreife schon länger als zwei Jahre zurückliegt, der mathematische Beweis: 5 * 17 = 85), als Rest, der als Ergebnis an der Konsole ausgegeben wird, verbleibt danach 15.

Dezimalzahlen als Operanden des %-Operators sind ebenfalls zugelassen, die Rückgabe ist dabei selber eine Dezimalzahl:


float x = 100.35;
float y = 17.45;
Console.WriteLine("Division mit % – Ergebnis = {0}", x % y);

Führen Sie diesen Code aus, wird im Konsolenfenster die Ausgabe 13,09999 erscheinen.

Widmen wir uns jetzt noch einem Beispiel, an dem die Arbeitsweise der Inkrement- bzw. Dekrementoperationen ersichtlich wird. Zunächst das Codefragment einer Postfixinkrementoperation:


int x = 5;
int y = x++;
// y hat den Inhalt 5

Zuerst wird der Variablen x der Wert 5 zugewiesen. Im zweiten Schritt wird der aktuelle Inhalt von x an y übergeben und danach der Inhalt der Variablen x um eins erhöht. Nach Beendigung der zweiten Anweisung weist x den Inhalt 6 auf und y den Inhalt 5.

Ein abweichendes Ergebnis erhalten wir, wenn wir den ++-Operators als Präfixinkrementoperator einsetzen.


int a = 5;
int b = ++a;
// b hat den Inhalt 6

In diesem Fall wird zuerst der Inhalt der Variablen a um eins erhöht, und erst danach erfolgt die Zuweisung an die Variable b. Die Folge ist, dass b denselben Inhalt wie a hat.

a
Achtung  Vielleicht wird Ihnen aufgefallen sein, dass Tabelle 3.7 keinen Potenzoperator beschreibt. Das ist keine Unterlassungssünde des Autors, da C# tatsächlich keinen bereitstellt. Stattdessen gibt es in der .NET-Klassenbibliothek eine Klasse namens Math, die diverse Methoden für mathematische Operationen bereitstellt, unter anderem auch die Methode Pow zum Potenzieren. Wollen Sie beispielsweise das Ergebnis von 2 berechnen, müssen Sie codieren: double value = Math.Pow(2, 5);

Besonderheiten einer Division

Bei einer Division zweier ganzer Zahlen gibt es einen Haken, der im ersten Moment nicht offensichtlich ist. Betrachten Sie dazu die beiden folgenden Anweisungen.


double dblVal = 3 / 4;
Console.WriteLine(dblVal);

An der Konsole wird nicht, wie zu erwarten wäre, das Ergebnis 0,75 angezeigt, sondern 0. Die Begründung dieses Phänomens ist recht einfach. Zur Laufzeit muss für die beiden Literale 3 und 4 Speicher reserviert werden. Die Laufzeit erkennt, dass es sich um ganze Zahlen handelt, und interpretiert den Typ der beiden Literale jeweils als Integer. Das Ergebnis der Division wird vor der endgültigen Zuweisung an dblVal zwischengespeichert. Dazu wird Speicher reserviert, der dem Typ des größten der beiden beteiligten Operanden entspricht mit der Folge, dass der Dezimalteil des Ergebnisses abgeschnitten wird. Bei der anschließenden Zuweisung an dblVal ist das Kind bereits in den Brunnen gefallen – das Ergebnis ist falsch.

Zur Lösung der Problematik muss sichergestellt werden, dass einer der beiden Operanden als Dezimalzahl erkannt wird. Sie können das erreichen, indem Sie beispielsweise


double dblVal = 3.0 / 4;

codieren. Die Zahl 3 wird jetzt nicht mehr als Integer, sondern als double verarbeitet. Dieser Typ ist aber erfreulicherweise in der Lage, auch Nachkommastellen aufzunehmen, und das Ergebnis wird korrekt angezeigt.

Eine andere Möglichkeit wäre es, einen der Operanden explizit in eine Dezimalzahl zu konvertieren:


double dblVal = (double)3 / 4;


Galileo Computing

3.4.2 Vergleichsoperatoren  downtop

Vergleichsoperatoren vergleichen zwei Ausdrücke miteinander. Der Rückgabewert ist immer ein Wahrheitswert, also entweder true oder false. Vergleiche können auf Gleichheit bzw. Ungleichheit sowie auf »größer« und »kleiner« durchgeführt werden.


Tabelle 3.8   Vergleichsoperatoren

Operator Beschreibung
a = = b (Vergleichsoperator) prüft, ob der Ausdruck a dem Ausdruck b entspricht, und gibt in diesem Fall true zurück.
a != b Ergebnis der Operation ist true, wenn a ungleich b ist.
a > b Ergebnis der Operation ist true, wenn a größer b ist.
a < b Ergebnis der Operation ist true, wenn a kleiner b ist.
a <= b Ergebnis der Operation ist true, wenn a kleiner oder gleich b ist.
a >= b Ergebnis der Operation ist true, wenn a größer oder gleich b ist.

Sehen wir uns einige boolesche Ausdrücke an:


bool bolCompare;
bolCompare = intVar <= 100;

Vergleichsoperatoren genießen eine höhere Priorität als der Zuweisungsoperator, daher wird zuerst der Teilausdruck intVar <= 100 ausgewertet. Das Ergebnis des Vergleichs, je nachdem, ob der Vergleich wahr oder falsch ist, wird der Variablen bolCompare zugewiesen. Sie können die boolesche Operation auch direkt zur Initialisierung bei der Deklaration verwenden:


bool bolCompare = intVar <= 100;

Mit den Vergleichsoperatoren lassen sich auch die Inhalte von zwei string-Variablen miteinander vergleichen:


string strText1 = "Hallo";
string strText2 = "hallo";
bool bolStringCompare = strText1 == strText2;

Der Rückgabewert wird in diesem Fall false sein, weil beim Vergleich von Zeichenketten der Groß-/Kleinschreibung Beachtung geschenkt wird.


Galileo Computing

3.4.3 Logische Operatoren  downtop

C# bietet ein Reihe logischer Operatoren an, die ebenfalls als Resultat einen booleschen Wert liefern. Sehen wir uns zunächst die folgende Tabelle an, bevor wir uns an einigen Beispielen die Wirkungsweise dieser Operatoren verdeutlichen.


Tabelle 3.9   Logische Operatoren

Operator Beschreibung
! Unärer Negationsoperator. Der Ausdruck !a ist true, wenn a einen unwahren Wert beschreibt, und false, wenn a wahr ist.
& (And-Operator/1.Variante) Der Ausdruck a & b ist dann true, wenn sowohl a als auch b true sind. Dabei werden in jedem Fall beide Ausdrücke ausgewertet.
| (Or-Operator/1. Variante) Der Ausdruck a | b ist true, wenn entweder a oder b wahr ist. Dabei werden in jedem Fall beide Ausdrücke ausgewertet.
^ (Xor-Operator) Der Ausdruck a ^ b ist true, wenn die beiden beteiligten Operanden unterschiedliche Wahrheitswerte haben.
&& (And-Operator/2. Variante) Der Ausdruck a && b ist true, wenn sowohl a als auch b true sind. Zuerst wird a ausgewertet. Sollte a false sein, ist in jedem Fall der Gesamtausdruck unabhängig von b auch falsch. b wird dann nicht mehr ausgewertet.
|| (Or-Operator/2. Variante) Der Ausdruck a || b ist true, wenn entweder a oder b true ist. Zuerst wird a ausgewertet. Sollte a bereits true sein, ist in jedem Fall der Gesamtausdruck unabhängig von b auch wahr. b wird dann nicht mehr ausgewertet.

Das Ergebnis einer Operation, an der logische Operatoren beteiligt sind, lässt sich am besten anhand einer Wahrheitstabelle darstellen.


Tabelle 3.10   Wahrheitstabellen

Bedingung 1 Bedingung 1 And-Operator Or-Operator Xor-Operator
false false false false false
true false false true true
false true false true true
true true true true false

Sehr häufig werden logische Operatoren benutzt, wenn eine Entscheidung darüber getroffen werden muss, welcher Programmcode in Abhängigkeit vom Ergebnis einer Bedingungsprüfung ausgeführt werden soll:


if(x != y)
  Console.WriteLine("x ist ungleich y");

In diesem einfachen Beispiel, das auch ohne größere Erklärung verständlich sein dürfte, wird die WriteLine-Methode dann ausgeführt, wenn die Bedingung


x != y

erfüllt ist, also true liefert.

Bedingungen können durchaus auch komplexer werden und neben logischen auch mehrere Vergleichsoperatoren enthalten. Betrachten wir das folgende Codefragment:


if(x < 5 || y > 20)
  Console.WriteLine("Bedingung ist erfüllt");

In diesem Codefragment haben wir es mit drei verschiedenen Operatoren zu tun. Da stellt sich sofort die Frage, in welcher Reihenfolge sie zur Bildung des Gesamtergebnisses herangezogen werden. Von den drei Operatoren hat der »||«-Operator die geringste Priorität, »<« und »>« sind in dieser Hinsicht gleichwertig (siehe auch Abschnitt 3.4.8). Folglich wird zuerst das Ergebnis aus


x < 5 

gebildet, danach das aus


y > 20 

Beide Teilergebnisse sind entweder true oder false und werden am Schluss mit »||« verglichen, woraus das Resultat gebildet wird. Manchmal ist es allerdings wegen der besseren Les- und Interpretierbarkeit einer komplexen Bedingung durchaus sinnvoll, auch unnötige Klammerpaare zu setzen:


if((x < 5) || (y > 20))

Interessant sind insbesondere die ähnlichen Paare »&« und »&&« bzw. »|« und »||«. Um die Unterschiede in der Verhaltensweise genau zu verstehen, wollen wir ein kleines Beispielprogramm entwickeln, das auch syntaktische Elemente enthält, die bisher noch nicht Thema waren.


// --------------------------------------------------------------
// Beispiel: ...\Kapitel 3\LogischeOperatoren
// --------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
namespace LogischeOperatoren {
  class Program {
    static void Main(string[] args){
      int x = 8;
      int y = 9;
      // wenn die Bedingung wahr ist, dann dies durch eine 
      // Ausgabe an der Konsole bestätigen
      if((x != y) | TestFunction())
        Console.WriteLine("Bedingung ist erfüllt");
      Console.ReadLine();
    }
    // benutzerdefinierte Prozedur
    static bool TestFunction() {
      Console.WriteLine("Aufruf der TestFunction");
      return true;
    }
  }
}

Neu ist in diesem Beispiel die Definition einer Prozedur, die hier TestFunction heißt. TestFunction macht nicht sehr viel: Sie schreibt nur eine Meldung in das Konsolenfenster und gibt immer den booleschen Wert true als Ergebnis des Aufrufs zurück.

In Main werden den beiden Variablen x und y feste Werte zugewiesen. Daraus folgt, dass die Bedingung


x != y 

immer wahr ist. Verknüpft wird diese Bedingung über den Oder-Operator »|« mit dem Aufruf der benutzerdefinierten Funktion. Da diese einen booleschen Wert zurückliefert, ist der Code syntaktisch korrekt. Führen wir das Programm aus, wird an der Konsole


Aufruf der TestFunction
Bedingung ist erfüllt

angezeigt. Halten wir an dieser Stelle die folgende Tatsache fest: Zwei Ausdrücke sind mit dem Oder-Operator »|« verknüpft. Beide Bedingungen werden vollständig geprüft, bevor das Gesamtergebnis der Operation feststeht. Aus der Wahrheitstabelle (Tabelle 3.10) können wir aber entnehmen, dass die Gesamtbedingung in jedem Fall true ist, wenn einer der beiden Ausdrücke wahr ist. Folglich wäre es auch vollkommen ausreichend, nach dem Prüfen der Bedingung x != y die zweite Bedingung keiner eigenen Überprüfung zu unterziehen, da das Endergebnis bereits feststeht.

Hier betritt nun der zweite Oder-Operator (»||«) die Bühne. Wenn wir die Bedingung nun mit


if((x != y) || TestFunction())

formulieren, lautet die Ausgabe an der Konsole nur noch:


Bedingung ist erfüllt

Der Wahrheitsgehalt der zweiten Bedingung wird erst gar nicht mehr überprüft, da er das Endergebnis nicht mehr beeinflussen kann. Genauso arbeiten auch die beiden Operatoren »&« und »&&«.

In der Praxis kann diesem an sich feinen Unterschied große Bedeutung hinsichtlich der Performance einer Anwendung zukommen. Wenn nämlich die zweite Bedingung eine länger andauernde Ausführungszeit für sich beansprucht und das Ergebnis der ersten Operation die Prüfung der zweiten Bedingung unnötig macht, kann mit »||« bzw. »&&« durchaus ein kleiner Beitrag zur Verbesserung der Gesamtleistung geleistet werden.


Galileo Computing

3.4.4 Bitweise Operatoren  downtop

Bitweise Operatoren dienen dazu, auf die Bitdarstellung nummerischer Operanden zuzugreifen. Dabei kann die Bitdarstellung eines nummerischen Operanden sowohl abgefragt als auch manipuliert werden.


Tabelle 3.11   Bitweise Operatoren

Operator Beschreibung
~ Invertiert jedes Bit des Ausdrucks (Einerkomplement).
| Aus x | y resultiert ein Wert, bei dem die korrespondierenden Bits von x und y Or–verknüpft werden.
& Aus x & y resultiert ein Wert, bei dem die korrespondierenden Bits von x und y And–verknüpft werden.
^ Aus x ^ y resultiert ein Wert, bei dem die korrespondierenden Bits von x und y Xor–verknüpft werden.
<< Aus x << y resultiert ein Wert, der durch die Verschiebung der Bits des ersten Operanden x um die durch im zweiten Operanden y angegebene Zahl nach links entsteht.
>> Aus x >> y resultiert ein Wert, der durch die Verschiebung der Bits des ersten Operanden x um die durch im zweiten Operanden y angegebene Zahl nach rechts entsteht.


Beachten Sie bitte, dass die Operatoren »&« und »|« sowohl als Vergleichsoperatoren als auch als bitweise Operaratoren eingesetzt werden können. Als Vergleichsoperatoren werden zwei boolesche Operanden miteinander verglichen und ein Wahrheitswert als Ergebnis der Operation zurückgeliefert, die bitweisen Operatoren vergleichen die einzelnen Bits einer Speicheradresse und bilden daraus das Ergebnis

Wollen wir uns jetzt an einigen Beispielen ansehen, wie diese Operatoren eingesetzt werden können.

Beispiel 1: Im Folgenden werden die beiden Literale 13 und 5 mit dem bitweisen &-Operator verknüpft:


a = 13 & 5;
Console.WriteLine(a);

Die Bitdarstellung dieser beiden Literale sieht wie folgt aus:


13 = 0000 0000 0000 1101
 5 = 0000 0000 0000 0101

An der Konsole wird als Ergebnis die Zahl 5 angezeigt, was der Bitdarstellung


0000 0000 0000 0101

entspricht. Wir können unser Ergebnis auch wie folgt interpretieren:


Eine vorgegebene Bitsequenz kann mit dem bitweisen &-Operator daraufhin untersucht werden, ob die vom rechten Operanden beschriebenen Bits in der vorgegebenen Bitfolge gesetzt sind. Das ist genau dann der Fall, wenn das Ergebnis der &-Verknüpfung dasselbe Ergebnis liefert wie im rechtsseitigen Operanden angegeben.

Beispiel 2: Verknüpfen wir nun zwei Literale mit dem bitweisen Oder-Operator »|«, also beispielsweise:


int a = 71 | 49;
Console.WriteLine(a);

Die Bitdarstellung dieser beiden Literale sieht wie folgt aus:


71 = 0000 0000 0100 0111
49 = 0000 0000 0011 0001

Das Ergebnis wird 119 lauten oder in Bitdarstellung:


0000 0000 0111 0111

Beispiel 3: Dem Xor-Operator »^« kommt ebenfalls eine ganz besondere Bedeutung zu, wie das folgende Beispiel zeigt.


int a = 53;
a = a ^ 22;
Console.WriteLine(a);

Sehen wir uns zunächst wieder die durch die beiden Literale beschriebenen Bitsequenzen an:


53 = 0000 0000 0011 0101
22 = 0000 0000 0001 0110

Lassen wir uns das Ergebnis an der Konsole anzeigen, wird 35 ausgegeben. Das entspricht der Bitfolge:


0000 0000 0010 0011

Hier wird also das zweite, dritte und das fünfte Bit des linken Operanden invertiert – so wie es der rechte Operand vorgibt. Analysieren wir das Ergebnis, kommen wir zu der folgenden Merkregel:


In einer vorgegebenen Bitsequenz können ganz bestimmte Bits mit dem bitweisen »^«-Operator invertiert werden. Die Ausgangsbitfolge steht links vom Operator, die Zahl, welche die Bits repräsentiert, die invertiert werden sollen, rechts vom Operator.

Wenden wir auf das Ergebnis ein zweites Mal den »^«-Operator an, also


int a = 53;
a = a ^ 22;
a = a ^ 22;

wird die Variable a wieder den ursprünglichen Wert 53 beinhalten.

Beispiel 4: Zum Abschluss nun noch ein Beispiel mit dem Verschiebeoperator »<<«. Die Bits des Literals 37 sollen um zwei Positionen nach links verschoben werden und die Anzeige sowohl im Dezimal- als auch im Hexadezimalformat erfolgen.


c = 37 << 2;
Console.WriteLine("dezimal    : {0}",c);
Console.WriteLine("hexadezimal: 0x{0:x}",c);

Die Zahl 37 entspricht der Bitdarstellung:


0000 0000 0010 0101

Nach der Verschiebung um die geforderten zwei Positionen nach links ergibt sich:


0000 0000 1001 0100

was wiederum der Zahl 148 oder in hexadezimal 0x94 entspricht, was uns auch die Laufzeit bestätigt.

Mit


c = 37 >> 2;

lautet das Ergebnis 9, was zu der folgenden Aussage führt:


Bei der Bitverschiebung eines positiven Operanden mit dem »<<«- oder »>>«-Operator werden die frei werdenden Leerstellen mit 0-Bits aufgefüllt.


Galileo Computing

3.4.5 Zuweisungsoperatoren  downtop

Bis auf die Ausnahme des einfachen Gleichheitszeichens dienen alle anderen Zuweisungsoperatoren einer verkürzten Schreibweise einer Anweisung, bei welcher der linke Operand einer Operation gleichzeitig auch der Empfänger des Operationsergebnisses ist.


Tabelle 3.12   Zuweisungsoperatoren

Operator Beschreibung
= x = y weist x den Wert von y zu.
+= x += y weist x den Wert von x + y zu.
-= x -= y weist x den Wert von x – y zu.
*= x *= y weist x den Wert von x * y zu.
/= x /= y weist x den Wert von x / y zu.
%= x %= y weist x den Wert von x % y zu.
&= x &= y weist x den Wert von x & y zu.
|= x |= y weist x den Wert von x | y zu.
^= x ^= y weist x den Wert von x ^ y zu.
<<= x <<= y weist x den Wert von x << y zu.
>>= x >>= y weist x den Wert von x >> y zu.


Galileo Computing

3.4.6 Stringverkettung  downtop

Den »+«-Operator haben Sie bereits in Verbindung mit arithmetischen Operationen kennen gelernt. Ihm kommt allerdings auch noch eine zweite Aufgabe zu, nämlich die Verkettung von Zeichenfolgen. Ist wenigstens einer der beiden an der Operation beteiligten Operanden vom Typ string, bewirkt der »+«-Operator eine Stringverkettung. Falls notwendig wird der Operand, der nicht vom Typ string ist, implizit in einen solchen konvertiert. Das Ergebnis der Stringverkettung ist wieder eine Zeichenfolge. Nachfolgend finden Sie einige Codefragmente, die Stringverkettungen beispielhaft zeigen.


string strText1 = "Leckere";
string strText2 = "Suppe";
string strText3 = strText1 + " " + strText2;
// strText3 hat den Inhalt 'Leckere Suppe'
int intVar = 4711;
string strText = "Hallo";
strText += intVar;
// strText hat den Inhalt 'Hallo4711'
string strInt1 = "4";
string strInt2 = "3";
Console.WriteLine(strInt1 + strInt2);
// strText hat den Inhalt '43'


Galileo Computing

3.4.7 Sonstige Operatoren  downtop

Wir sind noch nicht am Ende der Aufzählung der Operatoren von C# angelangt. Es stehen dem Entwickler noch einige besondere zur Verfügung, mit denen Sie in den vorhergehenden Abschnitten teilweise auch schon gearbeitet haben oder die Sie im weiteren Verlauf dieses Buches noch kennen lernen werden. Der Vollständigkeit halber sind die Operatoren dieser Gruppe in der Tabelle 3.13 aufgeführt.


Tabelle 3.13   Sonstige C#-Operatoren

Operator Beschreibung
. Der Punktoperator wird für den Zugriff auf die Eigenschaften oder Methoden einer Klasse verwendet, z.B. Console.ReadLine();.
[] Der []-Operator wird für Arrays, Indexer und Attribute verwendet, z.B. arr[10].
() Der ()-Operator dient zwei Zwecken: Er gibt die Reihenfolge der Operationen vor und wird auch zur Typkonvertierung eingesetzt.
?: Der ?:-Operator gibt einen von zwei Werten in Abhängigkeit von einem dritten zurück. Er ist eine einfache Variante der if-Bedingungsprüfung.
new Dient zur Instanzierung einer Klasse.
is Prüft den Laufzeittyp eines Objekts mit einem angegebenen Typ.
typeof Ruft das System.Type-Objekt für einen Typ ab.
checked / unchecked Steuerung der Reaktion der Laufzeit bei einem arithmetischen Überlauf


Galileo Computing

3.4.8 Operator-Vorrangregeln  toptop

Enthält ein Ausdruck mehrere Operatoren, entscheiden die Operator-Vorrangregeln über die Reihenfolge der Ausführung der einzelnen Operationen. In der Tabelle 3.14 sind die Operatoren in der Reihenfolge so aufgeführt, dass die weiter oben stehenden Vorrang vor den weiter unten stehenden haben.


Tabelle 3.14   Operator-Vorrangregeln

Gruppe Operator
1 x.y (Punktoperator), a[x], x++, x--, new, typeof, checked, unchecked
2 + (unär), – (unär), !, ~, ++x, --x, (<Typ>)x
3 *, /, %
4 + (additiv), – (additiv)
5 <<, >>
6 <, >, <=, >=, is
7 ==, !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?:
14 =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=

 << zurück
  
  Zum Katalog
Zum Katalog: Visual C# 2005
Visual C# 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Visual Basic 2005






 Visual Basic 2005


Zum Katalog: Java ist auch eine Insel






 Java ist auch eine
 Insel


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de